<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- Copyright © 1988-2023 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<title>gcov Testing (GNU Compiler Collection (GCC) Internals)</title>

<meta name="description" content="gcov Testing (GNU Compiler Collection (GCC) Internals)">
<meta name="keywords" content="gcov Testing (GNU Compiler Collection (GCC) Internals)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">

<link href="index.html" rel="start" title="Top">
<link href="Option-Index.html" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Testsuites.html" rel="up" title="Testsuites">
<link href="profopt-Testing.html" rel="next" title="profopt Testing">
<link href="LTO-Testing.html" rel="prev" title="LTO Testing">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span.r {font-family: initial; font-weight: normal; font-style: normal}
span:hover a.copiable-link {visibility: visible}
-->
</style>


</head>

<body lang="en">
<div class="section-level-extent" id="gcov-Testing">
<div class="nav-panel">
<p>
Next: <a href="profopt-Testing.html" accesskey="n" rel="next">Support for testing profile-directed optimizations</a>, Previous: <a href="LTO-Testing.html" accesskey="p" rel="prev">Support for testing link-time optimizations</a>, Up: <a href="Testsuites.html" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h3 class="section" id="Support-for-testing-gcov"><span>7.6 Support for testing <code class="command">gcov</code><a class="copiable-link" href="#Support-for-testing-gcov"> &para;</a></span></h3>

<p>Language-independent support for testing <code class="command">gcov</code>, and for checking
that branch profiling produces expected values, is provided by the
expect file <samp class="file">lib/gcov.exp</samp>.  <code class="command">gcov</code> tests also rely on procedures
in <samp class="file">lib/gcc-dg.exp</samp> to compile and run the test program.  A typical
<code class="command">gcov</code> test contains the following DejaGnu commands within comments:
</p>
<div class="example smallexample">
<pre class="example-preformatted">{ dg-options &quot;--coverage&quot; }
{ dg-do run { target native } }
{ dg-final { run-gcov sourcefile } }
</pre></div>

<p>Checks of <code class="command">gcov</code> output can include line counts, branch percentages,
and call return percentages.  All of these checks are requested via
commands that appear in comments in the test&rsquo;s source file.
Commands to check line counts are processed by default.
Commands to check branch percentages and call return percentages are
processed if the <code class="command">run-gcov</code> command has arguments <code class="code">branches</code>
or <code class="code">calls</code>, respectively.  For example, the following specifies
checking both, as well as passing <samp class="option">-b</samp> to <code class="command">gcov</code>:
</p>
<div class="example smallexample">
<pre class="example-preformatted">{ dg-final { run-gcov branches calls { -b sourcefile } } }
</pre></div>

<p>A line count command appears within a comment on the source line
that is expected to get the specified count and has the form
<code class="code">count(<var class="var">cnt</var>)</code>.  A test should only check line counts for
lines that will get the same count for any architecture.
</p>
<p>Commands to check branch percentages (<code class="code">branch</code>) and call
return percentages (<code class="code">returns</code>) are very similar to each other.
A beginning command appears on or before the first of a range of
lines that will report the percentage, and the ending command
follows that range of lines.  The beginning command can include a
list of percentages, all of which are expected to be found within
the range.  A range is terminated by the next command of the same
kind.  A command <code class="code">branch(end)</code> or <code class="code">returns(end)</code> marks
the end of a range without starting a new one.  For example:
</p>
<div class="example smallexample">
<pre class="example-preformatted">if (i &gt; 10 &amp;&amp; j &gt; i &amp;&amp; j &lt; 20)  /* <span class="r">branch(27 50 75)</span> */
                                /* <span class="r">branch(end)</span> */
  foo (i, j);
</pre></div>

<p>For a call return percentage, the value specified is the
percentage of calls reported to return.  For a branch percentage,
the value is either the expected percentage or 100 minus that
value, since the direction of a branch can differ depending on the
target or the optimization level.
</p>
<p>Not all branches and calls need to be checked.  A test should not
check for branches that might be optimized away or replaced with
predicated instructions.  Don&rsquo;t check for calls inserted by the
compiler or ones that might be inlined or optimized away.
</p>
<p>A single test can check for combinations of line counts, branch
percentages, and call return percentages.  The command to check a
line count must appear on the line that will report that count, but
commands to check branch percentages and call return percentages can
bracket the lines that report them.
</p>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="profopt-Testing.html">Support for testing profile-directed optimizations</a>, Previous: <a href="LTO-Testing.html">Support for testing link-time optimizations</a>, Up: <a href="Testsuites.html">Testsuites</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
